home *** CD-ROM | disk | FTP | other *** search
- Newsgroups: vmsnet.sources.games
- Path: uunet!caen!sol.ctr.columbia.edu!mary.fordham.edu!areid
- From: areid@mary.fordham.edu (Darin Reid)
- Subject: Qix.03 -- arcade based game
- Organization: Fordham University
- Message-ID: <25FEB199218591738@mary.fordham.edu>
- News-Software: VAX/VMS VNEWS 1.41
- Sender: news@ctr.columbia.edu (The Daily Lose)
- Date: Tue, 25 Feb 1992 22:59:00 GMT
-
- -+-+-+-+-+-+-+-+ START OF PART 3 -+-+-+-+-+-+-+-+
- X (( Snake_Head_X+Snake_Move_X = Start_Creat_X ) and ( Snake_Head_Y+S
- Vnake_Move_Y = Start_Creat_Y)) Then`20
- X Search_For_Move;
- X end else
- X Search_For_Move;
- X If ( Snake_Move_X = 0 ) And ( Snake_Move_Y = 0 ) Then Begin
- X If Not Snake_got_stuck Then Begin
- X If ( Moves_since_stuck > 10 ) and ( Len_snake > 10 ) Then begin
- X Swap_snake_Head_and_Tail
- X end else begin
- X Len_snake_When_stuck := Len_snake;
- X Snake_got_stuck := true;
- X end;
- X end Else
- X If ( Len_Snake < ( Len_Snake_When_stuck - 10 )) and ( Len_snake > 1
- V0 ) Then begin
- X Swap_Snake_Head_and_Tail;
- X Moves_since_stuck := 0;
- X Snake_Got_stuck := False;
- X end;
- X end Else`20
- X Snake_got_stuck := False;
- X Moves_Since_stuck := Moves_since_stuck + 1;
- X If ( Screen`5BSnake_Head_X+Snake_Move_X,Snake_Head_Y+Snake_Move_Y`5D.Wal
- Vl = Created ) or`20
- X (( Snake_Head_X+Snake_Move_X = You_X ) And ( Snake_Head_Y+Snake_Move_
- VY = You_Y ) )Then begin
- X Died := True;
- Xend;`20
- X
- Xend;
- X
- XProcedure Remove_tail;
- X
- XBegin
- X If ( Len_Snake >= Max_Len_Snake ) Or Snake_got_stuck Then Begin
- X If ( Snake_Tail_X <> Snake_Head_X ) or (Snake_Tail_Y <> Snake_Head_Y)
- V Then Begin;`20
- X Pos(Snake_Tail_X,Snake_Tail_Y,Blank);
- X Save_ch := Screen`5BSnake_Tail_X,Snake_Tail_Y`5D.Sym;
- X Screen`5BSnake_Tail_X,Snake_Tail_Y`5D.Sym := Blank;
- X Screen`5BSnake_Tail_X,Snake_Tail_Y`5D.wall := Other;
- X end;
- X If Len_Snake <= 1 Then Begin
- X Len_Snake := 1;
- X Snake_Tail_X := Snake_Head_X;
- X Snake_Tail_Y := Snake_Head_Y;
- X end else begin
- X Case Save_ch of`20
- X 'l' : If Screen`5BSnake_Tail_X,Snake_Tail_Y+1`5D.Sym In `5B'k','j',
- V'q'`5D Then`20
- X Snake_Tail_Y := Snake_Tail_Y + 1
- X Else
- X Snake_Tail_X := Snake_Tail_X + 1;
- X 'k' : If Screen `5BSnake_Tail_X,Snake_Tail_Y-1`5D.Sym In `5B'l','m'
- V,'q'`5D Then`20
- X Snake_Tail_Y := Snake_Tail_Y - 1
- X Else
- X Snake_Tail_X := Snake_Tail_X +1 ;
- X 'm' : If Screen`5BSnake_Tail_X,Snake_Tail_Y+1`5D.Sym In `5B'k','j',
- V'q'`5D Then
- X Snake_Tail_Y := Snake_Tail_Y + 1
- X Else
- X Snake_Tail_X := Snake_Tail_X - 1 ;
- X 'j' : If Screen`5BSnake_Tail_X,Snake_Tail_Y-1`5D.Sym In `5B'm','l',
- V'q'`5D Then`20
- X Snake_Tail_Y := Snake_Tail_Y - 1
- X Else
- X Snake_Tail_X := Snake_Tail_X - 1;
- X 'x' : If Screen`5BSnake_Tail_X-1,Snake_Tail_Y`5D.Sym In `5B'l','k',
- V'x'`5D Then`20
- X Snake_Tail_X := Snake_Tail_X - 1
- X Else
- X Snake_Tail_X := Snake_Tail_X + 1;
- X 'q' : If Screen`5BSnake_Tail_X,Snake_Tail_Y - 1 `5D.Sym In `5B 'l',
- V'm','q'`5D Then`20
- X Snake_Tail_Y := Snake_Tail_Y - 1
- X Else
- X Snake_Tail_Y := Snake_Tail_Y + 1;
- X Blank,'0' : `7B Nothing `7D;
- X end `7B CAse `7D;
- X end;
- X Len_Snake := Len_Snake - 1;
- X end Else
- X pos(Snake_Tail_X,Snake_Tail_Y,Screen`5BSnake_Tail_X,Snake_Tail_Y`5D.Sy
- Vm);
- Xend `7B remove_Tail`7D;
- X
- XBegin
- X Swaped_head := False;
- X Get_Move_For_Snake;
- X If Snake_Got_Stuck Then begin
- X Remove_tail;
- X Get_Move_For_Snake;
- X If Snake_Got_Stuck Then begin
- X Remove_tail;
- X Get_Move_For_Snake;
- X end;
- X end;
- X If ( Not Snake_Got_Stuck ) and ( Not Swaped_head ) Then Begin
- X Save_ch := Screen`5BSnake_Tail_X,Snake_Tail_Y`5D.Sym;
- X If Len_Snake > 2 Then`20
- X Screen`5BSnake_Tail_X,Snake_Tail_Y`5D.Sym := '%';
- X Screen`5BSnake_Head_X,Snake_Head_Y`5D.Wall := Snake;
- X Screen`5BSnake_Head_X,Snake_Head_Y`5D.Sym :=`20
- X Correct_Sym(Snake_Head_X,Snake_Head_Y,Snake_Head_X+Snake_Move
- V_X,Snake_Head_Y+Snake_Move_Y); `20
- X If (( Snake_Head_X<>Snake_Tail_X ) or ( Snake_Head_Y<>Snake_Tail_Y ) )
- V and (Len_Snake > 2) Then`20
- X Screen`5BSnake_Tail_X,Snake_Tail_Y`5D.Sym := Save_ch ;
- X Pos(Snake_Head_X,Snake_Head_Y,Screen`5BSnake_Head_X,Snake_Head_Y`5D.Sy
- Vm);
- X Len_snake := Len_Snake+1;
- X Snake_Head_X := Snake_Head_X + Snake_Move_X;
- X Snake_Head_Y := Snake_Head_Y + Snake_Move_Y;
- X Pos(Snake_Head_X,Snake_Head_Y,Qix_Head);
- X Remove_tail;
- X end;
- Xend;
- X
- X `20
- X
- X
- XProcedure Move_You;
- X
- XVar Count,X,Y,Tmp_X,Tmp_Y,LTmp_X,LTmp_Y: Integer;
- X ch,save_ch : char;
- X Inside_Box,Created_Box : Boolean;
- X
- XProcedure Cal_Inside;
- X
- XVar X,Y,Last_Y,Sudo_X,Sudo_Y,Lsudo_X,LSudo_Y,Max_X,Min_X,Max_Y,Min_Y: Intege
- Vr;
- X Inside_Box,Written_something : Boolean;
- X
- XProcedure Max_Or_Min(X,Y:Integer);
- X
- XBegin
- XIf X > Max_X Then`20
- X Max_X := X
- Xelse
- X If X < Min_X Then`20
- X Min_X := X;
- XIf Y > Max_Y Then`20
- X Max_Y := Y
- Xelse
- X If Y < Min_Y Then`20
- X Min_Y := Y;
- Xend;
- X
- X
- XBegin
- X Sudo_X := Snake_Head_X;
- X Sudo_Y := Snake_Head_Y;
- X While Not ( Screen`5BSudo_X,Sudo_Y`5D.Wall In `5BCreated,Inside`5D) Do`20
- X Sudo_X := Sudo_X - 1;
- X If Screen`5BSudo_X,Sudo_Y`5D.Wall = Created Then Begin
- X LSudo_X := Sudo_X;
- X LSudo_Y := Sudo_Y;
- X Case Screen`5BSudo_X,Sudo_Y`5D.Sym Of`20
- X 'm' , `20
- X 'v' ,
- X 'q' : Sudo_Y := Sudo_Y + 1;
- X 'j' : Sudo_X := Sudo_X - 1;
- X End `7B CAse `7D;
- X While Screen`5BSudo_X,Sudo_Y`5D.Wall = Created Do Begin
- X Move_Clockwise(Sudo_X,Sudo_Y,LSudo_X,LSudo_Y);
- X end;
- X end Else begin
- X LSudo_X := Sudo_X;
- X LSudo_Y := Sudo_Y;
- X Case Screen`5BSudo_X,Sudo_Y`5D.Sym Of`20
- X 'm' ,
- X 'v' ,
- X 'q' : Sudo_Y := Sudo_Y + 1;
- X 'j' : Sudo_X := Sudo_X - 1;
- X End `7B CAse `7D;
- X end;
- X While Screen`5BSudo_X,Sudo_Y`5D.Wall <> Created Do Begin
- X Move_Clockwise(Sudo_X,Sudo_Y,LSudo_X,LSudo_Y);
- X end;
- X Sleep(0,2500000);
- X
- X
- X If ( Sudo_X = Start_Creat_X ) And ( Sudo_Y = Start_Creat_Y ) Then`20
- X Dir_You := Clockwise
- X Else
- X Dir_You := AntiClockwise;
- X
- X Move_Opp_Clockwise(Sudo_X,Sudo_Y,LSudo_X,LSudo_Y);
- X
- X Min_X := 9999;
- X Min_Y := 9999;
- X Max_X := -9999;
- X Max_Y := -9999;
- X While Screen`5BSudo_X,Sudo_Y`5D.Wall <> Created Do Begin
- X Screen`5BSudo_X,Sudo_Y`5D.Wall := Tmp;
- X If Screen`5BSudo_X,Sudo_Y`5D.Sym = 'k' Then`20
- X IF ( LSudo_X = Sudo_X + 1) Then`20
- X Screen`5BSudo_X,Sudo_Y`5D.wall := TmpN
- X else
- X else
- X If Screen`5BSudo_X,Sudo_Y`5D.Sym = 'j' Then
- X If (LSudo_Y = Sudo_Y - 1) Then`20
- X Screen`5BSudo_X,Sudo_Y`5D.Wall := TmpN
- X`09`09else
- X else
- X If Screen`5BSudo_X,Sudo_Y`5D.Sym = 'u' Then`20
- X If (Lsudo_X = Sudo_X + 1 ) Then`20
- X Screen`5BSudo_X,Sudo_Y`5D.Wall := TmpN;
- X Move_Clockwise(Sudo_X,Sudo_Y,LSudo_X,LSudo_Y);
- X Max_Or_Min(Sudo_X,Sudo_Y);
- X end;
- X Sleep(0,2500000);
- X While ( Screen`5BSudo_X,Sudo_Y`5D.Wall = Created ) Do Begin
- X Screen`5BSudo_X,Sudo_Y`5D.Wall := TmpCreat;
- X If Screen`5BSudo_X,Sudo_Y`5D.Sym = 'k' Then`20
- X IF ( LSudo_X= Sudo_X + 1) Then`20
- X Screen`5BSudo_X,Sudo_Y`5D.wall := TmpN2
- X else
- X else
- X If Screen`5BSudo_X,Sudo_Y`5D.Sym = 'j' Then
- X If (LSudo_Y = Sudo_Y - 1) Then`20
- X Screen`5BSudo_X,Sudo_Y`5D.Wall := TmpN2
- X`09`09else
- X else
- X If Screen`5BSudo_X,Sudo_Y`5D.Sym = 'u' Then`20
- X If (Lsudo_X = Sudo_X + 1 ) Then`20
- X Screen`5BSudo_X,Sudo_Y`5D.Wall := TmpN2;
- X Max_Or_Min(Sudo_X,Sudo_Y);
- X Move_Clockwise(Sudo_X,Sudo_Y,LSudo_X,LSudo_Y);
- X end;
- X Sleep(0,2500000);
- X Break_Buff;
- X Writeln(esc,'<',Esc,'`5B7m',esc,'`5B?2l',esc,'F',Esc,'H');
- X For X := Min_X To Max_X Do Begin
- X Inside_box := False;
- X For Y := Min_Y To Max_Y Do begin
- X If Not ( Screen`5BX,Y`5D.Wall IN `5BInside,Outside,Snake,Other`5D
- V) Then Begin
- X If Screen`5BX,Y`5D.Sym In `5B'x','t'`5D Then`20
- X If Inside_Box Then Begin
- X Written_something := False;
- X Inside_box := False
- X End else
- X Inside_Box := True
- X else
- X If Screen`5BX,y`5D.Sym in `5B'k','j','u'`5D Then Begin
- X If Not ( Screen`5BX,Y`5D.Wall In `5BTmpN,TmpN2`5D ) Then b
- Vegin
- X Written_Something := False;
- X Inside_Box := False
- X end else
- X Inside_Box := True;
- X end else begin
- X If Written_Something Then begin
- X Written_Something := False;
- X Inside_Box := False
- X end Else
- X Inside_box := True;
- X end;
- X end Else Begin
- X If INside_Box and ( Screen`5BX,y`5D.wall = Other ) Then Begin
- X Amt_Filled_In := Amt_Filled_In + 1;
- X If Not Written_Something Then Begin
- X Pos(X,Y,Blank);
- X Written_Something := True;
- X end Else
- X Write_Buff(Blank);
- X Screen`5BX,Y`5D.Wall := Outside;
- X end Else Begin
- X Inside_Box := False;
- X Written_something := False
- X end;
- X end;
- X End;
- X end;`20
- X Break_Buff;
- X Writeln(esc,'<',esc,'`5B0m',esc,'`5B?2l',Esc,'F',Esc,'H');
- X While Screen`5BSudo_X,Sudo_Y`5D.Wall in `5BTmp,TmpN`5D Do Begin
- X Screen`5BSudo_X,Sudo_Y`5D.Wall := Outside;
- X Max_Or_Min(Sudo_X,Sudo_Y);
- X Move_Clockwise(Sudo_X,Sudo_Y,LSudo_X,LSudo_Y);
- X end;
- X Amt_Filled_In := Amt_Filled_In - 2;
- X While Screen`5BSudo_X,Sudo_Y`5D.Wall in `5BTmpCreat,Created,TmpN2`5D Do B
- Vegin
- X Amt_Filled_In := Amt_Filled_In + 1;
- X Screen`5BSudo_X,Sudo_Y`5D.Wall := INside;
- X Max_Or_Min(Sudo_X,Sudo_Y);
- X Move_Clockwise(Sudo_X,Sudo_Y,LSudo_X,LSudo_Y);
- X end;
- X If ( Not Marked_Clock_Greeb ) or`20
- X ( Num_Marked_Clock_Greeb > 0 ) Then Begin `7B > 0 If Marked When Ins
- Vide `7D
- X Marked_Clock_Greeb := True;
- X Marked_Clock_Greeb_X := Last_Clock_Greeb_X;
- X Marked_Clock_Greeb_Y := Last_Clock_Greeb_Y;
- X Num_Marked_Clock_Greeb := 0;
- X end;
- X If ( Not Marked_Anti_Greeb ) or`20
- X ( Num_Marked_Anti_Greeb > 0 ) Then Begin
- X Marked_Anti_Greeb := True;
- X Marked_Anti_Greeb_X := Last_Anti_Greeb_X;
- X Marked_Anti_Greeb_Y := Last_Anti_Greeb_Y;
- X Num_Marked_Anti_Greeb := 0;
- X end;
- Xend;
- X `20
- X
- X `20
- XFunction Valid_MOve:Boolean;
- X
- XFunction VAlid_MOve_Clockwise(X,Y,LX,LY,NX,NY:Integer):Boolean;
- X
- XBegin
- XMove_Clockwise(X,Y,LX,LY);
- XIf ( X = NX ) And ( Y = NY ) Then`20
- X Valid_MOve_Clockwise := True
- XElse
- X Valid_Move_Clockwise := False;
- Xend;
- X
- XFunction VAlid_MOve_Anti_Clockwise(X,Y,LX,LY,NX,NY:Integer):Boolean;
- X
- XBegin
- XMove_Anti_Clockwise(X,Y,LX,LY);
- XIf ( X = NX ) And ( Y = NY ) Then`20
- X Valid_MOve_Anti_Clockwise := True
- XElse
- X Valid_Move_Anti_Clockwise := False;
- Xend;
- X
- X
- XBegin
- XIf ( You_X = Last_You_X ) And ( You_Y = Last_You_Y ) Then Begin
- X ValiD_Move := True;
- X If Dir_You = Clockwise Then`20
- X Dir_You := AntiClockwise
- X Else
- X Dir_You := Clockwise;
- Xend Else begin
- X If Dir_You = Clockwise Then begin
- X If Valid_MOve_Clockwise(X,Y,Last_You_X,Last_You_Y,You_X,You_Y) Then`20
- X Valid_Move := True
- X Else
- X Valid_Move := False;
- X End Else BEgin
- X If Valid_Move_Anti_Clockwise(X,Y,Last_You_X,Last_You_Y,You_X,You_Y) Th
- Ven`20
- X Valid_Move := True
- X Else
- X Valid_Move := False;
- X end;
- Xend;
- X
- X`7B Case (Goto_X - x ) Of`20
- X 1 : If Screen`5BX,Y`5D.Sym in `5B'l','w','k','t','n','u','x'`5D Then`2
- V0
- X Valid_Move := True
- X Else
- X Valid_Move := False;
- X -1 : If Screen`5BX,y`5D.Sym in `5B't','n','u','m','v','j','x'`5D Then`
- V20
- X Valid_Move := True
- X Else
- X Valid_Move := False;
- X 0 : Case (Goto_Y - Y ) Of`20
- X 1 : If Screen`5BX,y`5D.Sym In `5B'l','w','t','n','m','v','q'`5D
- V Then`20
- X Valid_Move := True
- X Else
- X Valid_Move := False;
- X -1: If Screen`5BX,y`5D.Sym In `5B'w','k','n','u','v','j','q'`5D
- V Then`20
- X Valid_Move := True
- X Else
- X Valid_Move := False;
- X 0 : Valid_Move := False;
- X end;
- X end;`7D
- X end;
- X
- XBegin
- XSave_ch := Screen`5BSnake_Tail_X,Snake_Tail_Y`5D.Sym;
- XIf Len_Snake > 2 Then`20
- X Screen`5BSnake_Tail_X,Snake_Tail_Y`5D.Sym := '%';
- XX := You_X;
- XY := You_Y;
- XYou_X := You_X + Move_X;
- XYou_Y := You_Y + Move_Y;
- XCase Screen`5BYou_X ,You_Y`5D.Wall Of`20
- X Other : Begin
- X If Can_Create_Wall Then Begin
- X If Not Creating_wall Then begin
- X Moves_since_stuck := 999;
- X Snake_After_X := 9999;
- X Snake_After_Y := 9999;
- X Start_Creat_X := X;
- X Start_Creat_Y := Y;
- X Last_Start_Creat_X := Last_You_X;
- X Last_Start_Creat_Y := Last_You_Y;
- X Dir_When_Start_Creat := Dir_You;
- X end;
- X `09 Screen`5BX,y`5D.Sym := Correct_Sym(X,Y,You_X,You_Y);
- X `09 Screen`5BX,Y`5D.wall := Created;
- X Creating_wall := True;
- X Last_You_X := X;
- X Last_You_Y := Y;
- X end else begin
- X You_X := X;
- X You_Y := Y;
- X end;
- X end;
- X Snake : Begin
- X If ( Can_Create_wall ) Then Begin
- X Died := True;
- X If Not Creating_wall Then begin
- X Snake_After_X := 9999;
- X Snake_After_Y := 9999;
- X Start_Creat_X := X;
- X Start_Creat_Y := Y;
- X Last_Start_Creat_X := Last_You_X;
- +-+-+-+-+-+-+-+- END OF PART 3 +-+-+-+-+-+-+-+-
-
-
- __________
- Darin Reid
- Internet: Areid@Mary.Fordham.Edu
- Bitnet: Areid@Fordmulc
- Phone: (212) 749-8187
-